Arrayのiteratorとかでasync awaitを使いたい
code:js
(async () => {
for(const i of ary) {
console.log('before');
await something(i);
console.log('after');
}
})();
以下の例は期待通りに動かない(というか文法通りに実行されるので、期待が間違ってる)
code:js
(async () => {
await Promise.all(ary.map(async (i) => {
console.log('before');
await something(i);
console.log('after');
}));
})();
somethingが要素順に実行、終了されて欲しいが、結果は非同期になる
before, after, before, afterみたいに出力して欲しくても、実際はbefore, before,..., after, after となる
awaitが止めるのは直近のasync functionだけ
つまりここではmapではなく引数のコールバック関数にだけawaitがかかる
console.log('after');の実行はawaitされるが、その間にmapは進み、次のconsole.log('before');が先に実行される
この例、Promise.all使ってるせいで並列処理っぽくて余計にわかりにくいかも